package com.inspur.dgov.common.tool.node;

import java.util.List;

/**
 * 树节点归并类
 *
 * @Author chiyupei
 * @Date 19/9/20 上午10:18
 * @Version 1.0
 * @Description 树节点归并类
 */
public class TreeNodeUtil {

    /**
     * 将节点数组归并为一个森林（多棵树）（填充节点的children域）
     * 时间复杂度为O(n^2)
     * @param items
     * @return
     */
    public static <T extends INode> List<T> merge(List<T> items) {
        TreeNodeManager<T> nodeManager = new TreeNodeManager<>(items);
        items.forEach(item -> {
            if (null != item.getParentId()) {
                INode node = nodeManager.getTreeNodeAT(item.getParentId());
                if (node != null) {
                    node.getChildren().add(item);
                } else {
                    nodeManager.addParentId(item.getId());
                }
            }
        });
        return nodeManager.getRoot();
    }

}
